package com.panda.web.configuration;

import javax.annotation.PostConstruct;

import com.wechat.pay.java.core.http.HttpClient;
import com.wechat.pay.java.service.refund.RefundService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
import com.wechat.pay.java.core.notification.NotificationConfig;
import com.wechat.pay.java.core.notification.NotificationParser;
import com.wechat.pay.java.service.payments.h5.H5Service;
import com.wechat.pay.java.service.payments.jsapi.JsapiService;
import com.wechat.pay.java.service.payments.nativepay.NativePayService;

import lombok.Getter;

/**
 * @desc: 微信config
 * @author: shy
 * @date: 2024/4/9 10:06
 */
@Configuration
@Getter
public class WeChatConfig {


    /**
     * 商户号
     */
    @Value("${wechat.pay.mch-id}")
    public String merchantId;
    /**
     * 支付结果通知地址
     */
    @Value("${wechat.pay.notifyUrl}")
    public String notifyUrl;

    /**
     * 退款结果通知地址
     */
    @Value("${wechat.pay.returnUrl}")
    public String returnUrl;
    /**
     * 商户API私钥路径
     */
    @Value("${wechat.pay.privateKeyPath}")
    public String privateKeyPath;
    /**
     * 商户证书序列号
     */
    @Value("${wechat.pay.certSerialNo}")
    public String merchantSerialNumber;
    /**
     * 商户APIV3密钥
     */
    @Value("${wechat.pay.api-key}")
    public String apiV3Key;
    /**
     * AppId
     */
    @Value("${gzh.api.app-id}")
    public String appId;


    private Config config;

    @PostConstruct
    public void initConfig() {
        // 使用自动更新平台证书的RSA配置
       //  一个商户号只能初始化一个配置，否则会因为重复的下载任务报错
        config = new RSAAutoCertificateConfig.Builder()
                .merchantId(merchantId)
                .privateKeyFromPath(privateKeyPath)
                .merchantSerialNumber(merchantSerialNumber)
                .apiV3Key(apiV3Key)
                .build();
    }

    @Primary
    @Bean()
    public H5Service h5Service() {
        return new H5Service.Builder()
                .config(config)
                .build();
    }


    @Primary
    @Bean()
    public JsapiService jsapiService() {
        return new JsapiService.Builder()
                .config(config)
                .build();
    }

    @Primary
    @Bean()
    public NativePayService nativePayService() {
        return new NativePayService.Builder()
                .config(config)
                .build();
    }

    @Primary
    @Bean
    public NotificationParser notificationParser() {
        return new NotificationParser((NotificationConfig) config);

    }

//
//    @Primary
//    @Bean()
//    public H5Service h5Service() {
//        return  null;
//    }
//
//
//    @Primary
//    @Bean()
//    public JsapiService jsapiService() {
//        return  null;
//    }
//
//    @Primary
//    @Bean()
//    public NativePayService nativePayService() {
//
//        return  null;
//    }
//
//    @Primary
//    @Bean
//    public NotificationParser notificationParser() {
//
//        return  null;
//    }

}
